#include "drv_led.h"
#include "delay.h"

/**************************************
函数名：drv_led_init
函数功能：对led引脚进行初始化
输入参数：无
输出参数：无
其它：//led -》pf8 低电平亮
****************************************/
void drv_led_init(void)
{

	//GPIO_InitTypeDef GPIO_InitStruct;
	//RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//开启gpiof的时钟
	//RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//开启gpioc的时钟
	//GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//配置为输出模式
	//GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
	//GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;//使能上拉
	//GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//速率2M
	
	//GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;//指定具体哪一个引脚
	//GPIO_Init(GPIOF, &GPIO_InitStruct);//传入上面的参数去初始化GPIOF	
	
	
	//GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;//指定具体哪一个引脚
	//GPIO_Init(GPIOC, &GPIO_InitStruct);//传入上面的参数去初始化GPIOC

	
	//GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;//指定具体哪一个引脚
	//GPIO_Init(GPIOC, &GPIO_InitStruct);//传入上面的参数去初始化GPIOC	

	
	//GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;//指定具体哪一个引脚
	//GPIO_Init(GPIOC, &GPIO_InitStruct);//传入上面的参数去初始化GPIOC	
	
	//GPIO_SetBits(GPIOF, GPIO_Pin_8);//默认led关闭
	//GPIO_ResetBits(GPIOC, GPIO_Pin_4);//默认led关闭
	//GPIO_ResetBits(GPIOC, GPIO_Pin_3);//默认led关闭
	//GPIO_ResetBits(GPIOC, GPIO_Pin_13);//默认led关闭
	 // 1. 使能GPIOF和GPIOC的时钟（AHB1总线）
    RCC->AHB1ENR |= (RCC_AHB1ENR_GPIOFEN | RCC_AHB1ENR_GPIOCEN);
    
    // 2. 配置PF8为输出模式（推挽输出，无上下拉，低速）
    // 清除PF8原有模式（MODER[17:16]）
    GPIOF->MODER &= ~(0x03 << (8 * 2));
    // 设置PF8为通用输出模式（01）
    GPIOF->MODER |= (0x01 << (8 * 2));
    // 推挽输出（OTYPER[8] = 0）
    GPIOF->OTYPER &= ~LED_PF8_PIN;
    // 无上下拉（PUPDR[17:16] = 00）
    GPIOF->PUPDR &= ~(0x03 << (8 * 2));
    
    // 3. 配置PC4为输出模式
    GPIOC->MODER &= ~(0x03 << (4 * 2));  // 清除原有模式
    GPIOC->MODER |= (0x01 << (4 * 2));   // 输出模式
    GPIOC->OTYPER &= ~LED_PC4_PIN;       // 推挽输出
    GPIOC->PUPDR &= ~(0x03 << (4 * 2));  // 无上下拉
    
    // 4. 配置PC3为输出模式
    GPIOC->MODER &= ~(0x03 << (3 * 2));  // 清除原有模式
    GPIOC->MODER |= (0x01 << (3 * 2));   // 输出模式
    GPIOC->OTYPER &= ~LED_PC3_PIN;       // 推挽输出
    GPIOC->PUPDR &= ~(0x03 << (3 * 2));  // 无上下拉
    
    // 5. 配置PC13为输出模式
    GPIOC->MODER &= ~(0x03 << (13 * 2)); // 清除原有模式
    GPIOC->MODER |= (0x01 << (13 * 2));  // 输出模式
    GPIOC->OTYPER &= ~LED_PC13_PIN;      // 推挽输出
    GPIOC->PUPDR &= ~(0x03 << (13 * 2)); // 无上下拉
    
    // 6. 默认关闭所有LED（输出高电平）
    GPIOF->ODR |= LED_PF8_PIN;   // PF8高电平（关闭）
    GPIOC->ODR |= (LED_PC4_PIN | LED_PC3_PIN | LED_PC13_PIN);  // PC4/3/13高电平（关闭）
}
/**************************************
函数名：drv_led_open
函数功能：打开led
输入参数：无
输出参数：无
其它：//led -》pf8 低电平亮
****************************************/
void drv_led_open(void)
{
	//GPIO_ResetBits(GPIOF, GPIO_Pin_8);
	//delay_ms(1000);
	//GPIO_SetBits(GPIOC, GPIO_Pin_4);
	//delay_ms(1000);
	//GPIO_SetBits(GPIOC, GPIO_Pin_3);
	//delay_ms(1000);
	//GPIO_SetBits(GPIOC, GPIO_Pin_13);
	// PF8输出低电平（点亮）
    GPIOF->ODR &= ~LED_PF8_PIN;
    delay_ms(1000);
    
    // PC4输出低电平（点亮）
    GPIOC->ODR &= ~LED_PC4_PIN;
    delay_ms(1000);
    
    // PC3输出低电平（点亮）
    GPIOC->ODR &= ~LED_PC3_PIN;
    delay_ms(1000);
    
    // PC13输出低电平（点亮）
    GPIOC->ODR &= ~LED_PC13_PIN;
}
/**************************************
函数名：drv_led_close
函数功能：关闭led
输入参数：无
输出参数：无
其它：//led -》pf8 低电平亮
****************************************/
void drv_led_close(void)
{
	//GPIO_SetBits(GPIOF, GPIO_Pin_8);
	//GPIO_SetBits(GPIOC, GPIO_Pin_4);
	//GPIO_SetBits(GPIOC, GPIO_Pin_3);
	//GPIO_SetBits(GPIOC, GPIO_Pin_13);
	GPIOF->ODR |= LED_PF8_PIN;    // PF8高电平（关闭）
    GPIOC->ODR |= LED_PC4_PIN;    // PC4高电平（关闭）
    GPIOC->ODR |= LED_PC3_PIN;    // PC3高电平（关闭）
    GPIOC->ODR |= LED_PC13_PIN;   // PC13高电平（关闭）
}

